'use strict';

const db = uniCloud.database();

/**
 * 记录积分变化
 * @param {Object} params - 参数对象
 * @param {string} params.userId - 用户ID
 * @param {number} params.changeAmount - 积分变化量（正数为增加，负数为减少）
 * @param {string} params.changeType - 变化类型
 * @param {string} params.description - 变化描述
 * @param {string} [params.relatedOrderId] - 关联订单ID（可选）
 * @returns {Promise<void>}
 */
async function logPointChange({
  userId,
  changeAmount,
  changeType,
  description,
  relatedOrderId = null
}) {
  try {
    // 获取用户当前积分
    const userRes = await db.collection('users').doc(userId).field({ points: 1 }).get();
    if (!userRes.data || userRes.data.length === 0) {
      console.error(`[积分记录] 用户不存在: ${userId}`);
      return;
    }

    const currentPoints = userRes.data[0].points || 0;
    const balanceAfter = currentPoints + changeAmount;

    // 写入积分记录
    await db.collection('point_records').add({
      user_id: userId,
      change_amount: changeAmount,
      change_type: changeType,
      description: description,
      related_order_id: relatedOrderId,
      balance_after: balanceAfter,
      create_time: Date.now()
    });

    console.log(`[积分记录] 用户 ${userId} 积分变化: ${changeAmount > 0 ? '+' : ''}${changeAmount}, 原因: ${description}`);
  } catch (error) {
    console.error(`[积分记录] 记录失败:`, error);
    // 不抛出错误，避免影响主流程
  }
}

/**
 * 变化类型说明
 * - referral_register: 推荐新用户注册
 * - purchase_complete: 自己购买订单完成
 * - promotion_complete: 推广订单完成
 * - order_cancel: 订单取消核减
 * - order_refund: 订单退款核减
 * - manual_adjust: 手动调整
 * - system_adjust: 系统调整
 */

module.exports = {
  logPointChange
};

